home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 2003 June / macformat-130.iso / mac / Reviewed⁄Demos / Spearhead Demo / demota / pak1.pk3 / anim / pain.scr < prev    next >
Encoding:
Text File  |  2002-10-21  |  11.4 KB  |  526 lines

  1. //------
  2. // PainStand
  3. //------
  4.  
  5. // Hit locations
  6. // 0  head
  7. // 1  helmet
  8. // 2  neck
  9. // 3  upper torso
  10. // 4  middle torso
  11. // 5  lower torso
  12. // 6  pelvis
  13. // 7  right upper arm
  14. // 8  left upper arm
  15. // 9  right upper leg
  16. // 10 left upper leg
  17. // 11 right lower arm
  18. // 12 left lower arm
  19. // 13 right lower leg
  20. // 14 left lower leg
  21. // 15 right hand
  22. // 16 left hand
  23. // 17 right foot
  24. // 18 left foot
  25.  
  26.  
  27.  
  28.  
  29. // Find the local yaw for later use
  30. //println "Local yaw: " local.yaw "."
  31.  
  32. // need to handle initial position when hit (stand,crouch,...)
  33. // need to return to said state upon exit..
  34. // death handlers...
  35.  
  36. PainStand:
  37.  
  38.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  39.     waitthread painglobals
  40.  
  41.     self weaponcommand mainhand attachtohand mainhand
  42.  
  43.     local.yaw = self GetLocalYawFromVector self.fact.direction
  44.  
  45.     self.blendtime = 0.4
  46.     self.deathhandler = anim/killed.scr
  47.  
  48.     switch (self.position)
  49.     {
  50.         prone:
  51.         pronewalk:
  52.             goto PainProne
  53.             break
  54.  
  55.         stand:
  56.         walk:
  57.         default:
  58.             local.randnum = randomint 100
  59.             switch (self.fact.location)
  60.             {
  61.                 // headshot
  62.                  case 1: // helmet
  63.                 case 0: // head
  64.                 case 2: // neck
  65.                     if (self.weaponpos == down)
  66.                     {
  67.                         self setmotionanim (self.weapongroup+"_pain_gundown_stand_head")
  68.                     }
  69.                     else
  70.                     {
  71.                         self setmotionanim ( self.weapongroup + "_stand_hit_head" )
  72.                     }
  73.                     break
  74.  
  75.                 // Stand Knees
  76.                 case 9: // right upper leg
  77.                 case 13: // right lower leg
  78.                 case 17: // right foot
  79.                 case 10: // left upper leg
  80.                 case 14: // left lower leg
  81.                 case 18: // left foot
  82.  
  83.                     if ( (self.aistandpainonly == NIL) || (self.aistandpainonly == 0) )
  84.                     {
  85.                         if ( (self.fact.damage * 2) > local.randnum)
  86.                         {
  87.                             self setmotionanim ( self.weapongroup + "_pain_standtoknees")
  88.                             self.painhandler = anim/pain.scr::pain_knees
  89.                             self waittill flaggedanimdone
  90.                             goto pain_knees
  91.                         }
  92.                         else
  93.                         {
  94.                             self setmotionanim ( self.weapongroup + "_stand_hit_leg")
  95.                         }
  96.                         break
  97.                     }
  98.                     // no break on else
  99. //                    println "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ self.aistandpainonly is " self.aistandpainonly ", falling through..."
  100.  
  101.                 // Stand Straight
  102.                 case 3: // upper torso
  103.                 case 4: // middle torso
  104.                 case 5: // lower torso
  105.                 case 6: // pelvis
  106.                     if (local.yaw > -45 && local.yaw < 45 && self.fact.damage > 50)
  107.                     {
  108.                         self setmotionanim (self.weapongroup + "_pain_standstraight")
  109.                     }
  110.                     else
  111.                     {
  112.                         if (self.fact.damage*2 > local.randnum)
  113.                         {
  114.                             self setmotionanim ( self.weapongroup + "_stand_hit_uppertorso")
  115.                         }
  116.                         else
  117.                         {
  118.                             self setmotionanim ( self.weapongroup + "_stand_hit_lowertorso")
  119.                         }
  120.                     }
  121.                     break
  122.  
  123.                 // Stand Left
  124.                 case 8: // left upper arm
  125.                 case 12: // left lower arm
  126.                 case 16: // left hand
  127.                     if (self.weaponpos == down)
  128.                     {
  129.                         self setmotionanim (self.weapongroup + "_pain_gundown_stand_left")
  130.                     }
  131.                     else
  132.                     {
  133.                         self setmotionanim (self.weapongroup + "_pain_standleft")
  134.                     }
  135.                     break
  136.  
  137.                 // Stand Right
  138.                 case 7: // right upper arm
  139.                 case 11: // right lower arm
  140.                 case 15: // right hand
  141.                     self setmotionanim (self.weapongroup + "_pain_standright")
  142.                        break
  143.  
  144.                 default:
  145. //                    println "Pain in unknown location " self.fact.location "."
  146.                     // Add some variety until we're confident of our
  147.                     // location detection.
  148.                     local.randnum = randomint 100
  149.                     if ( (local.randnum > 30) || ((self.aistandpainonly != NIL) && (self.aistandpainonly == 1)) )
  150.                     {
  151.                         local.randnum = randomint 100
  152.                         if ( local.randnum > 80 )
  153.                             self setmotionanim (self.weapongroup + "_pain_standstraight")
  154.                         else if (local.randnum > 40)
  155.                             self setmotionanim (self.weapongroup + "_pain_standleft")
  156.                         else
  157.                             self setmotionanim (self.weapongroup + "_pain_standright")
  158.                     }
  159.                     else
  160.                     {
  161.                         self setmotionanim (self.weapongroup + "_pain_standtoknees")
  162.                         self.painhandler = anim/pain.scr::pain_knees
  163.                         self waittill flaggedanimdone
  164.                         goto pain_knees
  165.                     }
  166.                     break
  167.             }
  168.             break
  169.  
  170.         knees:
  171.         crouch:
  172.             goto kneeshit
  173.             break
  174.  
  175.         crawl:
  176.             goto crawlhit
  177.             break
  178.  
  179.         floor:
  180.             goto floorhit
  181.             break
  182.  
  183.     }
  184.  
  185.     ///////
  186.  
  187.     self waittill flaggedanimdone
  188. end
  189.  
  190.  
  191.  
  192. pain_knees:
  193.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  194.  
  195.     self.painhandler = anim/pain.scr::kneeshit
  196.     self.deathhandler = anim/pain.scr::kneesdeath
  197.  
  198.     // repeat random # times (1-4)
  199. //    local.randnum = randomint 4
  200.     local.randnum = 0
  201.     while(local.randnum > -1)
  202.     {
  203.         self setmotionanim (self.weapongroup + "_pain_kneesidle")
  204.         self waittill flaggedanimdone
  205.         local.randnum--
  206.     }
  207.  
  208.     // low health we crawl, good health we get up
  209.  
  210. //    println self.health
  211.  
  212.     if (self.normal_health>40)
  213.     {
  214.         goto stand_recover
  215.     }
  216.     else
  217.     {
  218.         goto kneeshit
  219.     }
  220. end
  221.  
  222.  
  223.  
  224. kneeshit:
  225.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  226.     waitthread painglobals
  227.  
  228.     local.randnum = randomint 100
  229.  
  230.     if (local.randnum>50)    // hmm crawl or hit the deck
  231.     {    // lets crawl
  232.         self setmotionanim (self.weapongroup + "_pain_kneestocrawl")
  233.         self waittill flaggedanimdone
  234.  
  235.         goto pain_crawl
  236.     }
  237.     else
  238.     {
  239.         self.painhandler = anim/pain.scr::floorhit
  240.         self setmotionanim (self.weapongroup + "_pain_kneestofloor")
  241.         self waittill flaggedanimdone
  242.  
  243.         goto pain_floor
  244.     }
  245.  
  246. end
  247.  
  248.  
  249. pain_crawl:
  250.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  251.  
  252.     self.painhandler = anim/pain.scr::crawlhit
  253.     self.deathhandler = anim/pain.scr::crawldeath
  254.  
  255.     local.randnum = randomint 2
  256.  
  257.     while(local.randnum > -1)
  258.     {
  259.         self setmotionanim (self.weapongroup + "_pain_crawl")
  260.         self waittill flaggedanimdone
  261.         local.randnum--
  262.     }
  263.  
  264.     goto crawlhit
  265. end
  266.  
  267.  
  268. crawlhit:
  269.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  270.     waitthread painglobals
  271.  
  272.     self setmotionanim (self.weapongroup + "_pain_crawltofloor")
  273.     self waittill flaggedanimdone
  274.  
  275.     goto pain_floor
  276. end
  277.  
  278.  
  279. pain_floor:
  280.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  281.  
  282.     self.painhandler = anim/pain.scr::floorhit
  283.     self.deathhandler = anim/pain.scr::floordeath
  284.  
  285. //    local.randnum = randomint 5
  286.     local.randnum = 0
  287.     while(local.randnum > -1)
  288.     {
  289.         self setmotionanim (self.weapongroup + "_pain_flooridle")
  290.         self waittill flaggedanimdone
  291.         local.randnum--
  292.     }
  293.  
  294. //    if (self.normal_health < 25)
  295.     if (0)
  296.     {
  297.         self setmotionanim (self.weapongroup + "_pain_floortocrawl")
  298.         self waittill flaggedanimdone
  299.  
  300.         goto pain_crawl
  301.     }
  302.     else
  303.     {
  304.         self setmotionanim (self.weapongroup + "_pain_floortoknees")
  305.         self waittill flaggedanimdone
  306.         goto pain_knees_recover
  307.     }
  308.  
  309. end
  310.  
  311. floorhit:
  312.     waitthread painglobals
  313.     goto pain_floor
  314. end
  315.  
  316.  
  317.  
  318. ////////////////////////////////////
  319.  
  320.  
  321.  
  322. recover:
  323.     switch(self.position)
  324.     {
  325.         case stand:
  326.             goto stand_recover
  327.             break
  328.         case walk:
  329.             goto stand_recover
  330.             break
  331.         case knees:
  332.             goto crouch_recover
  333.             break
  334.         case crawl:
  335.             break
  336.         case floor:
  337.             break
  338.     }
  339. end
  340.  
  341.  
  342.  
  343.  
  344. pain_knees_recover:
  345.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  346.  
  347.     self.painhandler = anim/pain.scr::kneeshit
  348.     self.deathhandler = anim/pain.scr::kneesdeath
  349.  
  350.     // repeat random # times (1-4)
  351. //    local.randnum = randomint 4
  352.     local.randnum = 0
  353.     while(local.randnum > -1)
  354.     {
  355.         self setmotionanim (self.weapongroup + "_pain_kneesidle")
  356.         self waittill flaggedanimdone
  357.         local.randnum--
  358.     }
  359.  
  360.     goto recover
  361. end
  362.  
  363.  
  364.  
  365. stand_recover:
  366.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  367.  
  368.     self setmotionanim (self.weapongroup + "_pain_kneestostand")
  369.     self waittill flaggedanimdone
  370.     self.position=stand
  371.     self.painhandler = anim/pain.scr::PainStand
  372.     self.deathhandler = anim/killed.scr
  373. end
  374.  
  375. crouch_recover:
  376.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  377.  
  378.     self setmotionanim (self.weapongroup + "_pain_kneestocrouch")    // Boon 9-13-01 Changed animation from kneesidle
  379.     self waittill flaggedanimdone
  380.     self.position=crouch
  381.     self.painhandler = anim/pain.scr::PainStand
  382.     self.deathhandler = anim/killed.scr
  383. end
  384.  
  385.  
  386.  
  387. kneesdeath:
  388.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  389.  
  390.     self setmotionanim (self.weapongroup + "_pain_kneestodeath")
  391.     self waittill flaggedanimdone
  392.     self.position = "dead"
  393. end
  394.  
  395. crawldeath:
  396.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  397.  
  398.     self setmotionanim (self.weapongroup + "_pain_crawltodeath")
  399.     self waittill flaggedanimdone
  400.     self.position = "dead"
  401. end
  402.  
  403. floordeath:
  404.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  405.  
  406.     self setmotionanim (self.weapongroup + "_pain_floortodeath")
  407.     self waittill flaggedanimdone
  408.     self.position = "dead"
  409. end
  410.  
  411. //============================================
  412. PainProne:
  413.     //self.painhandler = anim/pain.scr::PainProne
  414.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  415.     self.blendtime = 0.50
  416.     waitthread painglobals
  417.     switch(self.fact.location)
  418.     {
  419.         // Stand Straight
  420.         case 3: // upper torso
  421.         case 4: // middle torso
  422.         case 5: // lower torso
  423.         case 6: // pelvis
  424.             if (self.fact.damage > 50)
  425.             {
  426.                 self setmotionanim (self.weapongroup + "_prone_hit_uppertorso")
  427.                 self waittill flaggedanimdone
  428.             }
  429.             else
  430.             {
  431.                 self setmotionanim (self.weapongroup + "_prone_hit_lowertorso")
  432.                 self waittill flaggedanimdone
  433.             }
  434.             break
  435.  
  436.         // headshot
  437.         case 1: // helmet
  438.         case 0: // head
  439.         case 2: // neck
  440.             self setmotionanim (self.weapongroup + "_prone_hit_head")
  441.             self waittill flaggedanimdone
  442.             break
  443.  
  444.         // Stand Right
  445.         case 7: // right upper arm
  446.         case 11: // right lower arm
  447.         case 15: // right hand
  448.             self setmotionanim (self.weapongroup + "_prone_hit_rarm")
  449.             self waittill flaggedanimdone
  450.             break
  451.  
  452.         // Stand Left
  453.         case 8: // left upper arm
  454.         case 12: // left lower arm
  455.         case 16: // left hand
  456.             self setmotionanim (self.weapongroup + "_prone_hit_larm")
  457.             self waittill flaggedanimdone
  458.             break
  459.  
  460.         // Stand Knees
  461.         case 9: // right upper leg
  462.         case 13: // right lower leg
  463.         case 17: // right foot
  464.         case 10: // left upper leg
  465.         case 14: // left lower leg
  466.         case 18: // left foot
  467.             self setmotionanim (self.weapongroup + "_prone_hit_leg")
  468.             self waittill flaggedanimdone
  469.             break
  470.  
  471.         default:
  472.             //println "Painhitstand got hit in unknown location: " self.fact.location
  473.             local.randnum = randomint 100
  474.             if (local.randnum < 25)
  475.             {
  476.                 self setmotionanim (self.weapongroup + "_prone_hit_leg")
  477.                 self waittill flaggedanimdone
  478.             }
  479.             else if (local.randnum < 50)
  480.             {
  481.                 self setmotionanim (self.weapongroup + "_prone_hit_rarm")
  482.                 self waittill flaggedanimdone
  483.             }
  484.             else if (local.randnum < 75)
  485.             {
  486.                 self setmotionanim (self.weapongroup + "_prone_hit_larm")
  487.                 self waittill flaggedanimdone
  488.             }
  489.             else
  490.             {
  491.                 self setmotionanim (self.weapongroup + "_prone_hit_lowertorso")
  492.                 self waittill flaggedanimdone
  493.             }
  494.             break
  495.     }
  496. end
  497.  
  498. //============================================
  499. painchair:
  500.     waitexec anim/smoking.scr::SmokeRemoveCigarette
  501.     waitthread painglobals
  502.     self.blendtime = 0.2
  503.     self setmotionanim "chair_alert_stand"
  504.     self waittill flaggedanimdone
  505.     self.painhandler = anim/pain.scr::PainStand
  506.     self.deathhandler = anim/killed.scr
  507. end
  508.  
  509. //============================================
  510. painglobals:
  511.  
  512.     // Pop off the helmet
  513.     if ( (self.fact.location == 0) || (self.fact.location == 1) )
  514.     {
  515.         self pophelmet
  516.     }
  517.  
  518.  
  519.     // Make a pain sound
  520.     if ( (self.nextsaypain == NULL) || (self.nextsaypain == NIL) || (level.time > self.nextsaypain) )
  521.     {
  522.         self.nextsaypain = level.time + 1 + ((randomint 4)/4)
  523.         self setsay pain_generic
  524.     }
  525.  
  526. end